package SingletonHengry;
/**
 * 单例模式：即为每次获取的对象都是同一个对象。
 *
 * 单例模式的特点：
 *
 * 1.构造方法私有化（即构造方法被private修饰）
 *
 * 2 该单例对象必须由单例类自行创建
 *
 * 3.内部提供一个公共静态的方法给外界进行访问（方法被public static 修饰）
 *
 * 单例模式又可以分为常说的饿汉式（饥渴型）单例模式和懒汉式（懒狗）单例模式。
 *
 * 这两个又有什么区别呢？
 *
 * 饿汉式（饥渴型）单例模式
 *
 * 在类加载的时候就创建对象，不会出现线程安全问题（因为还没有开始加载的时候就创建好了对象，线程都没有机会去争夺）。
 */


public class SingletonHungry {
    //成员变量，在类加载时候就把对象创建好了
    static SingletonHungry s = new SingletonHungry();

    //1.构造方法私有化
    private SingletonHungry(){}

    //2、内部提供一个公共的静态方法给外界进行调用和访问
    //返回值类型为 SingletonHungry（因为需要通过类进行创建对象）
    public static SingletonHungry getInstance() {
        //该单例对象必须由单例类自行创建
        // 没有static修饰的成员变量不可以通过静态方法进行调用（所以需要加上）
        return s;
    }

    public static void main(String[] args) {
        // 因为是static修饰的直接通过类名.方法名（）进行调用（如果是非static修饰还需要创建对象，比较麻烦）
        SingletonHungry i1 = SingletonHungry.getInstance();
        SingletonHungry i2 = SingletonHungry.getInstance();
        System.out.println("获取的对象是否相同："+(i1==i2));
        // 判断获取的对象是不是同一个对象，通过比较地址值
    }


}